import axios from 'axios' // axios
import store from '@/store' // vuex
import router from '@/router' // router
import xtxMessage from '@/components/library/Message'

// export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/' // 基地址
export const baseURL = 'https://apipc-xiaotuxian-front.itheima.net'

// axios 配置
const instance = axios.create({
  baseURL // 基地址
  // timeout: 5000 // 超时时间
})

// 请求拦截器
instance.interceptors.request.use(
  // 发送请求前
  config => {
    // 加上请求头
    const { token } = store.getters
    if (token) config.headers.Authorization = `Bearer ${token}`

    return config
  },
  // 捕获错误
  err => {
    xtxMessage({ text: err, type: 'error' })
    return Promise.reject(err)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  // 解构响应体
  res => res.data.result,
  // 捕获错误
  err => {
    xtxMessage({ text: err, type: 'error' })
    // 401 编码 表示身份验证 (token) 等问题，需要重新登陆
    if (err.response && err.response.status === 401) {
      // 重置用户数据
      store.commit('user/setUser', {})
      // 保留当前完整路径，以便登录后重定向回来
      // encodeURIComponent 转二进制编码
      const fullPath = encodeURIComponent(router.currentRoute.value.fullPath)
      router.push('/login?redirectUrl=' + fullPath)
    }
    return Promise.reject(err)
  }
)

// 请求工具封装
export default (url, submitData = {}, method = 'get') =>
  instance({
    url,
    method,
    [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
  })
